package busterminal.services;

import java.util.HashMap;
import java.util.Map;

/**
 * Класс, который является хранилищем сервисных объектов
 */
public class ServiceLocator {

    /**
     * Коллекция, содержащая информацию о всех экземплярах объектов-реализаций
     */
    public static Map<Class<?>, Object> services = new HashMap<Class<?>, Object>();

    /**
     * Регистрация экземпляров реализаций сервисных объектов
     * @param clazz имя интерфейса
     * @param service сервис - экземпляр класса, реализующего интерфейс
     */
    public static void registerService(Class<?> clazz, Object service) {
        services.put(clazz, service);
    }

    /**
     * Получить сервис заданного типа
     * @param <ServiceType> тип возвращаемого сервиса
     * @param clazz имя интерфейса
     * @return интерфейс (сервис)
     */
    public static <ServiceType> ServiceType getService(Class<ServiceType> clazz) {
        return (ServiceType) services.get(clazz);
    }
}
